package funcs

import (
	"time"

	"github.com/gorilla/websocket"
)

type JoinSruct struct {
	Company_id int    `json:"company_id"` // 公司id
	Param      string `json:"param"`      // 聊天室类型
	User_id    string `json:"user_id"`    // 用户id
}

type FishType int

const (
	Heart    FishType = 0 //心跳
	User_len FishType = 1 //在线人数
	History  FishType = 2 //自己的历史记录
	Mass     FishType = 3 //群发消息
	Singe    FishType = 4 //单独发送

	GoBang FishType = 14 //五子棋

)

type WsMessage struct {
	Type     FishType    `json:"type"`
	Data     interface{} `json:"data"`
	UserId   string      `json:"userId"`
	Business int         `json:"business"` // 0 chat  1 work 2 dualprevent 3 webrtc
	CallUrl  interface{} `json:"callUrl"`
}

type Client struct {
	ID          string
	IpAddress   string
	IpSource    string
	Socket      *websocket.Conn
	Send        chan []byte
	Start       time.Time
	ExpireTime  time.Duration // 一段时间没有接收到心跳则过期
	UserId      string        // 用户ID
	Headimg     string        // 用户头像
	Person_sign string        // 用户签名
	Phone       string        // 用户电话
	Name        string        // 用户名称
	Business    FishType      `form:"business"`   // 业务ID,某些业务改了该值,才推送 aicar 1
	Company_id  int           `form:"company_id"` // 公司ID
	AllParams   []string      // 加入的会议  离开的时候 把会议的人清空
}

type ClientManager struct {
	Clients    map[string][]*Client // 记录在线用户
	Broadcast  chan []byte          // 触发消息广播
	SingleCast chan []byte          // 单信息
	SingId     string               // 单消息的回复id
	Register   chan *Client         // 触发新用户登陆
	UnRegister chan *Client         // 触发用户退出
}

var Manager ClientManager = ClientManager{
	Clients:    make(map[string][]*Client),
	Broadcast:  make(chan []byte),
	SingleCast: make(chan []byte),
	SingId:     "",
	Register:   make(chan *Client),
	UnRegister: make(chan *Client),
}

func InitManger() ClientManager {
	return Manager
}
